freeslot(
	"MT_EVILEYE",
		"SPR_EVYE",
		"S_EVILEYE_FLY1",
		"S_EVILEYE_FLY2",
		"S_EVILEYE_FLY3",
		"S_EVILEYE_FLY4",
		"S_EVILEYE_FLY5",
		"S_EVILEYE_FLY6",
		"S_EVILEYE_FLY7",
		"S_EVILEYE_FLY8",
		"S_EVILEYE_FLY9",
		"S_EVILEYE_STUNNED1",
		"S_EVILEYE_STUNNED2",
		"S_EVILEYE_STUNNED3",
		"S_EVILEYE_ATK",
	"MT_EVILEYEORB",
		"S_EVILEYEORB1",
		"S_EVILEYEORB2",
		"S_EVILEYEORB3",
	"sfx_evyedg",	//damaged
	"sfx_evyekd",	//killed
	"sfx_evyeos"	//Orb Summon
)

mobjinfo[MT_EVILEYE]={
	doomednum = 1562,
	spawnstate = S_EVILEYE_FLY1,
	deathstate = S_XPLD1,
	deathsound = sfx_evyekd,
	painstate = S_EVILEYE_STUNNED1,
	painsound = sfx_evyedg,
	spawnhealth = 3,
	reactiontime = 1,
	painchance = 200,
	speed = 1,
	radius = 23*FRACUNIT,
	height = 29*FRACUNIT,
	mass = 100,
	damage = 0,
	flags = MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE|MF_SLIDEME
}

states[S_EVILEYE_FLY1]={SPR_EVYE, A, 1, A_CrawlaCommanderThink, 0, 12*FRACUNIT, S_EVILEYE_FLY2}
states[S_EVILEYE_FLY2]={SPR_EVYE, A, 1, A_CrawlaCommanderThink, 0, 12*FRACUNIT, S_EVILEYE_FLY3}
states[S_EVILEYE_FLY3]={SPR_EVYE, A, 1, A_CrawlaCommanderThink, 0, 12*FRACUNIT, S_EVILEYE_FLY4}
states[S_EVILEYE_FLY4]={SPR_EVYE, B, 1, A_CrawlaCommanderThink, 0, 12*FRACUNIT, S_EVILEYE_FLY5}
states[S_EVILEYE_FLY5]={SPR_EVYE, B, 1, A_CrawlaCommanderThink, 0, 12*FRACUNIT, S_EVILEYE_FLY6}
states[S_EVILEYE_FLY6]={SPR_EVYE, B, 1, A_CrawlaCommanderThink, 0, 12*FRACUNIT, S_EVILEYE_FLY7}
states[S_EVILEYE_FLY7]={SPR_EVYE, C, 1, A_CrawlaCommanderThink, 0, 12*FRACUNIT, S_EVILEYE_FLY8}
states[S_EVILEYE_FLY8]={SPR_EVYE, C, 1, A_CrawlaCommanderThink, 0, 12*FRACUNIT, S_EVILEYE_FLY9}
states[S_EVILEYE_FLY9]={SPR_EVYE, B, 1, A_CrawlaCommanderThink, 0, 12*FRACUNIT, S_EVILEYE_FLY1}

states[S_EVILEYE_ATK]={SPR_EVYE, D, 175, None, 0, 0, S_EVILEYE_FLY1}

states[S_EVILEYE_STUNNED1]={SPR_EVYE, E, 1, A_SetObjectFlags, MF_SHOOTABLE, 1, S_EVILEYE_STUNNED2}
states[S_EVILEYE_STUNNED2]={SPR_EVYE, E, 70, None, 0, 0, S_EVILEYE_STUNNED3}
states[S_EVILEYE_STUNNED3]={SPR_EVYE, E, 1, A_SetObjectFlags, MF_SHOOTABLE, 2, S_EVILEYE_FLY1}

mobjinfo[MT_EVILEYEORB]={
	doomednum = -1,
	spawnstate = S_EVILEYEORB1,
	deathstate = S_NULL,
	spawnhealth = 1000,
	reactiontime = 8,
	speed = 0,
	radius = 32*FRACUNIT,
	height = 32*FRACUNIT,
	mass = 100,
	damage = 0,
	flags = MF_NOGRAVITY|MF_NOCLIP
}
states[S_EVILEYEORB1]={SPR_EVYE, F|TR_TRANS20, 4, None, 0, 0, S_EVILEYEORB2}
states[S_EVILEYEORB2]={SPR_EVYE, G|TR_TRANS40, 4, None, 0, 0, S_EVILEYEORB3}
states[S_EVILEYEORB3]={SPR_EVYE, H|TR_TRANS20, 4, None, 0, 0, S_EVILEYEORB1}

local function eveye_f(mobj)
	
	local cooldown = 30*TICRATE
	local etapa1
	local etapa2
	local etapa3

	if etapa1 == nil
		etapa1 = false
	end
	if etapa2 == nil
		etapa2 = false
	end
	if etapa3 == nil
		etapa3 = false
	end
	
	//Vou precisar salvar algumas variáveis aqui
	if mobj.evileyeready == nil
		mobj.evileyeready = false
	end
	if mobj.evilorbtime == nil
		mobj.evilorbtime = 0
	end
	if mobj.evileyeskill == nil
		mobj.evileyeskill = false
	end
	
	//Cooldown
	if mobj.evilorbtime > 0
		mobj.evilorbtime = $ - 1
	end

	//Verificando a distância
	local distxy = P_AproxDistance(mobj.target.x - mobj.x, mobj.target.y - mobj.y)
		
	if (distxy <= FixedMul(150*FRACUNIT, mobj.scale))
		etapa1 = true
	else
		etapa1 = false
	end
	if (mobj.z <= (mobj.floorz + mobj.target.height + 20*FRACUNIT))
		etapa2 = true
	else
		etapa2 = false
	end
	if (distxy <= FixedMul(100*FRACUNIT, mobj.scale))
		etapa3 = true
	else
		etapa3 = false
	end

	//Voe
	if (mobj.state ~= S_EVILEYE_STUNNED2)
	and (etapa1 == true)
		if (etapa2 == true) //Estou perto, mas voando baixo?
			P_SetObjectMomZ(mobj, 5*FRACUNIT, false)
		end
		if (etapa3 == true) //posição ideal pra soltar a habilidade
			mobj.momx = 0
			mobj.momy = 0
			mobj.evileyeready = true
			if mobj.target.player ~= nil
			and (mobj.target.player.pflags & PF_JUMPED)
				P_SetObjectMomZ(mobj, 5*FRACUNIT, false)
				P_InstaThrust(mobj, mobj.angle, (-5*FRACUNIT))
			end
		end
	end

	//Use a habilidade
	if (mobj.evileyeready == true)
	and (mobj.evilorbtime == 0)
	
		mobj.state = S_EVILEYE_ATK
		
		//Efeito visual do orbe
		local orbe = P_SpawnMobj(mobj.x, mobj.y, mobj.z, MT_EVILEYEORB)
		orbe.fuse = 5*TICRATE
		
		if not S_SoundPlaying(mobj, sfx_evyeos)
			S_StartSound(mobj, sfx_evyeos)
		end
		
		for p in players.iterate
			if not (p and p.mo)
				continue
			else
				if P_AproxDistance(p.mo.x - mobj.x, p.mo.y - mobj.y) <= FixedMul(250*FRACUNIT, mobj.scale)
					p.debuff_confused = true //Ativa o debuff no jogador
				end
			end
		end
	--
		mobj.evilorbtime = cooldown
		mobj.evileyeready = false
	end
	
	if (mobj.state == S_EVILEYE_ATK)
		mobj.momx = 0
		mobj.momy = 0
		mobj.momz = 0
	end
end

addHook("MobjThinker", function(mobj)
	if (mobj and mobj.valid and mobj.target ~= nil)
		eveye_f(mobj)
	end
end, MT_EVILEYE)